//package com.fundodoo.sfe.admin.controller;
//
//import java.util.ArrayList;
//import java.util.Date;
//import java.util.List;
//import java.util.Locale;
//import java.util.Map;
//import java.util.stream.Collectors;
//
//import org.apache.commons.collections.CollectionUtils;
//import org.apache.commons.lang3.StringUtils;
//import org.apache.shiro.SecurityUtils;
//import org.apache.shiro.authz.annotation.RequiresPermissions;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.context.MessageSource;
//import org.springframework.context.i18n.LocaleContextHolder;
//import org.springframework.stereotype.Controller;
//import org.springframework.ui.Model;
//import org.springframework.web.bind.annotation.RequestMapping;
//import org.springframework.web.bind.annotation.ResponseBody;
//
//import com.tpv.vc.common.Constant;
//import com.tpv.vc.common.annotation.Log;
//import com.tpv.vc.common.annotation.NoRepeatSubmit;
//import com.tpv.vc.common.controller.BaseController;
//import com.tpv.vc.common.domain.PermissionInfo;
//import com.tpv.vc.common.domain.QueryRequest;
//import com.tpv.vc.common.domain.ResponseBo;
//import com.tpv.vc.common.util.DateUtil;
//import com.tpv.vc.common.util.FileUtils;
//import com.tpv.vc.common.util.MD5Utils;
//import com.tpv.vc.system.domain.Dept;
//import com.tpv.vc.system.domain.User;
//import com.tpv.vc.system.domain.UserPasswordHistory;
//import com.tpv.vc.system.service.DeptService;
//import com.tpv.vc.system.service.UserPasswordHistoryService;
//import com.tpv.vc.system.service.UserService;
//import com.tpv.vc.utils.StringUtil;
//
//@Controller
//public class UserController extends BaseController {
//
//    private Logger log = LoggerFactory.getLogger(this.getClass());
//
//    @Autowired
//    private UserService userService;
//    @Autowired
//    private MessageSource messageSource;
//    
//    @Autowired
//    private DeptService deptService;
//    
//    @Autowired
//    private UserPasswordHistoryService userPasswordHistoryService;
//    
//    private static final String MODULE = Constant.MODULE_USER;
//    
//    
////    private Locale locale = LocaleContextHolder.getLocale();
//
//    private static final String ON = "on";
//
//    @Log(value="访问用户管理页面",module=MODULE)
//    @RequestMapping("user")
//    @RequiresPermissions("user:list")
//    public String index(Model model) {
//        User user = super.getCurrentUser();
//        
//        model.addAttribute("user", user);
//        
//        //添加国际化处理
//        Locale locale = LocaleContextHolder.getLocale();
//        model.addAttribute("user.name", messageSource.getMessage("user.name", null, locale));
//        
//        return "system/user/user";
//    }
//
//    @RequestMapping("user/checkUserName")
//    @ResponseBody
//    public boolean checkUserName(String username, String oldusername) {
//        if (StringUtils.isNotBlank(oldusername) && username.equalsIgnoreCase(oldusername)) {
//            return true;
//        }
//        User result = this.userService.findByName(username);
//        return result == null;
//    }
//
//    /**
//     * @author jm.hong
//     * @param userId
//     * @param model
//     * @return ResponseBo
//     */
//    @Log(value="获取用户",module=MODULE)
//    @RequestMapping("user/getUser")
//    @ResponseBody
//    public ResponseBo getUser(Long userId,Model model) {
//    	Locale locale = LocaleContextHolder.getLocale();
//        try {
//            User user = this.userService.findById(userId);
//            User userTemp = userService.findByName(user.getUsername());
//            if(null != userTemp) {
//            	Date validTime = userTemp.getValidTime();
//            	Date passwordUpdateTime = userTemp.getPasswordUpdateTime();
//                String validTimeStr = DateUtil.getDateFormat(validTime,"yyyy-MM-dd");
//                String passwordUpdateTimeStr = DateUtil.getDateFormat(passwordUpdateTime, "yyyy-MM-dd");
//                user.setValidTimeStr(validTimeStr);
//                user.setPasswordUpdateTimeStr(passwordUpdateTimeStr);
//            }
//            return ResponseBo.ok(user);
//        } catch (Exception e) {
//            log.error("获取用户失败", e);
//            return ResponseBo.error(messageSource.getMessage("user.get.fail", null, locale));
//        }
//    }
//
//    @Log(value="获取用户信息列表",module=MODULE)
//    @RequestMapping("user/list")
//    @RequiresPermissions("user:list")
//    @ResponseBody
//    public Map<String, Object> userList(QueryRequest request, User user) {
//    	PermissionInfo permissionInfo = super.getCurrentUserPermissionInfo();
//    	
//    	//jinhui.li
//    	Dept dept = new Dept();
//		dept.setParentId(permissionInfo.getDeptId());
//    	dept.setSelf("0");//不查自己
//		List<Dept> deptIds = this.deptService.findAllDepts(dept);//查询所有的子用户组
//		user.setDeptIds(deptIds.stream().map(Dept::getDeptId).collect(Collectors.toList()));
//    	
//		if(null == user.getDeptIds() || user.getDeptIds().size() == 0) { //jinhui.li 2019.01.04
//			return super.selectByPageNumSize(request, () -> new ArrayList<>());
//		}
//
//		return super.selectByPageNumSize(request, () ->this.userService.findUserWithDept(user, request) );
//    }
//    
//    @Log(value="导出用户信息excel",module=MODULE)
//    @RequestMapping("user/excel")
//    @ResponseBody
//    public ResponseBo userExcel(User user) {
//    	Locale locale = LocaleContextHolder.getLocale();
//        try {
//        	PermissionInfo permissionInfo = super.getCurrentUserPermissionInfo();
//        	//jinhui.li
//        	Dept dept = new Dept();
//    		dept.setParentId(permissionInfo.getDeptId());
//        	dept.setSelf("0");
//    		List<Dept> deptIds = this.deptService.findAllDepts(dept);
//    		user.setDeptIds(deptIds.stream().map(Dept::getDeptId).collect(Collectors.toList()));
//    		
//    		if(null == user.getDeptIds() || user.getDeptIds().size() == 0) { //jinhui.li 2019.01.04
//    			return FileUtils.createExcelByPOIKit(messageSource.getMessage("user.table", null, locale), new ArrayList<>(), User.class);
//    		}
//            List<User> list = this.userService.findUserWithDept(user, null);
//            return FileUtils.createExcelByPOIKit(messageSource.getMessage("user.table", null, locale), list, User.class);
//        } catch (Exception e) {
//            log.error("导出用户信息Excel失败", e);
//            return ResponseBo.error(messageSource.getMessage("export.fail", null, locale));
//        }
//    }
//
//    @Log(value="导出用户信息csv",module=MODULE)
//    @RequestMapping("user/csv")
//    @ResponseBody
//    public ResponseBo userCsv(User user) {
//    	Locale locale = LocaleContextHolder.getLocale();
//        try {
//        	PermissionInfo permissionInfo = super.getCurrentUserPermissionInfo();
//        	//jinhui.li
//        	Dept dept = new Dept();
//    		dept.setParentId(permissionInfo.getDeptId());
//        	dept.setSelf("0");
//    		List<Dept> deptIds = this.deptService.findAllDepts(dept);
//    		user.setDeptIds(deptIds.stream().map(Dept::getDeptId).collect(Collectors.toList()));
//    		
//    		if(null == user.getDeptIds() || user.getDeptIds().size() == 0) { //jinhui.li 2019.01.04
//    			return FileUtils.createExcelByPOIKit(messageSource.getMessage("user.table", null, locale), new ArrayList<>(), User.class);
//    		}
//        	
//            List<User> list = this.userService.findUserWithDept(user, null);
//            return FileUtils.createCsv(messageSource.getMessage("user.table", null, locale), list, User.class);
//        } catch (Exception e) {
//            log.error("导出用户信息Csv失败", e);
//            return ResponseBo.error(messageSource.getMessage("export.fail", null, locale));
//        }
//    }
//
//    @Log(value="用户注册",module=MODULE)
//    @RequestMapping("user/regist")
//    @NoRepeatSubmit
//    @ResponseBody
//    public ResponseBo regist(User user) {
//    	Locale locale = LocaleContextHolder.getLocale();
//        try {
//            User result = this.userService.findByName(user.getUsername());
//            if (result != null) {
//                return ResponseBo.warn(messageSource.getMessage("user.existed", null, locale));
//            }
//            this.userService.registUser(user);
//            return ResponseBo.ok();
//        } catch (Exception e) {
//            log.error("注册失败", e);
//            return ResponseBo.error(messageSource.getMessage("user.register.fail", null, locale));
//        }
//    }
//
//    @Log(value="更换主题",module=MODULE)
//    @RequestMapping("user/theme")
//    @ResponseBody
//    public ResponseBo updateTheme(User user) {
//        try {
//            this.userService.updateTheme(user.getTheme(), user.getUsername());
//            return ResponseBo.ok();
//        } catch (Exception e) {
//            log.error("修改主题失败", e);
//            return ResponseBo.error();
//        }
//    }
//
//    @Log(value="新增用户",module=MODULE)
//    @NoRepeatSubmit
////    @RequiresPermissions("user:add")
//    @RequestMapping("user/add")
//    @ResponseBody
//    public ResponseBo addUser(User user, Long[] roles) {
//    	Locale locale = LocaleContextHolder.getLocale();
//        try {
//        	String userName = user.getUsername();
//        	String password = user.getPassword();
//        	String email = user.getEmail();
//        	setValidTime(user);
//        	boolean userNameIsValid = StringUtil.userNameValid(userName);
//        	if(!userNameIsValid) {
//        		return ResponseBo.error(messageSource.getMessage("user.name.not.valid", null, locale));
//        	}
//        	if(password.length()<3 || password.length()>16) {
//        		return ResponseBo.error(messageSource.getMessage("user.password.not.valid", null, locale));
//        	}
//        	if(StringUtils.isEmpty(email)) {
//        		return ResponseBo.error(messageSource.getMessage("vali.email.msg1", null, locale));
//        	}
//        	Boolean emailIsValid = StringUtil.emailIsValid(email);
//        	if(!emailIsValid) {
//        		return ResponseBo.error(messageSource.getMessage("vali.email.msg2", null, locale));
//        	}
//        	Long deptId = user.getDeptId();
//        	if(null == deptId) {
//        		return ResponseBo.error(messageSource.getMessage("user.dept.not.empty", null, locale));
//        	}
//        	
//            if (ON.equalsIgnoreCase(user.getStatus()))
//                user.setStatus(User.STATUS_VALID);
//            else
//                user.setStatus(User.STATUS_LOCK);
//            
//            user.setPasswordUpdateTime(DateUtil.getNextAfterMonth(3));
//            this.userService.addUser(user, roles);
//            return ResponseBo.ok(messageSource.getMessage("user.add.success", null, locale));
//        } catch (Exception e) {
//            log.error("新增用户失败", e);
//            return ResponseBo.error(messageSource.getMessage("user.add.fail", null, locale));
//        }
//    }
//    
//    public void setValidTime(User user) {
//    	String validTimeStr = user.getValidTimeStr();
//    	if(StringUtils.isNotBlank(validTimeStr)) {
//    		user.setValidTime(DateUtil.strDate(validTimeStr,"yyyy-MM-dd"));
//    	}
//    	Date validTime = user.getValidTime();
//    	if(null == validTime) {
//    		user.setValidTime(DateUtil.getNextMonth());
//    	}
//    }
//
//    @Log(value="修改用户",module=MODULE)
////    @RequiresPermissions("user:update")
//    @RequestMapping("user/update")
//    @ResponseBody
//    public ResponseBo updateUser(User user, Long[] rolesSelect) {
//    	Locale locale = LocaleContextHolder.getLocale();
//        try {
//        	String userName = user.getUsername();
//        	String password = user.getPassword();
//        	String email = user.getEmail();
//        	setValidTime(user);
//        	boolean userNameIsValid = StringUtil.userNameValid(userName);
//        	if(!userNameIsValid) {
//        		return ResponseBo.error(messageSource.getMessage("user.name.not.valid", null, locale));
//        	}
//			//modify by jm.hong 密码不为空时才修改
//        	if(StringUtils.isNotBlank(password)) {
//        		if(password.length()<3 || password.length()>16) {
//            		return ResponseBo.error(messageSource.getMessage("user.password.not.valid", null, locale));
//            	}
//        		
//        		String newPassword = MD5Utils.encrypt(user.getUsername().toLowerCase(), password);
//        		user.setPassword(newPassword);
//        	}
//        	if(StringUtils.isEmpty(email)) {
//        		return ResponseBo.error(messageSource.getMessage("vali.email.msg1", null, locale));
//        	}
//        	Boolean emailIsValid = StringUtil.emailIsValid(email);
//        	if(!emailIsValid) {
//        		return ResponseBo.error(messageSource.getMessage("vali.email.msg2", null, locale));
//        	}
//        	Long deptId = user.getDeptId();
//        	if(null == deptId) {
//        		return ResponseBo.error(messageSource.getMessage("user.dept.not.empty", null, locale));
//        	}
//            if (ON.equalsIgnoreCase(user.getStatus()))
//                user.setStatus(User.STATUS_VALID);
//            else
//                user.setStatus(User.STATUS_LOCK);
//            
//            
//            String passwordUpdateTimeStr = user.getPasswordUpdateTimeStr();
//            if(StringUtils.isNotBlank(passwordUpdateTimeStr)) {
//            	user.setPasswordUpdateTime(DateUtil.strDate(passwordUpdateTimeStr, "yyyy-MM-dd"));
//            }
//            this.userService.updateUser(user, rolesSelect);
//            return ResponseBo.ok(messageSource.getMessage("user.update.success", null, locale));
//        } catch (Exception e) {
//            log.error("修改用户失败", e);
//            return ResponseBo.error(messageSource.getMessage("user.update.fail", null, locale));
//        }
//    }
//
//    @Log(value="删除用户",module=MODULE)
////    @RequiresPermissions("user:delete")
//    @RequestMapping("user/delete")
//    @ResponseBody
//    public ResponseBo deleteUsers(String ids) {
//    	Locale locale = LocaleContextHolder.getLocale();
//        try {
//            this.userService.deleteUsers(ids);
//            return ResponseBo.ok(messageSource.getMessage("user.delete.success", null, locale));
//        } catch (Exception e) {
//            log.error("删除用户失败", e);
//            return ResponseBo.error(messageSource.getMessage("user.delete.fail", null, locale));
//        }
//    }
//
//    @RequestMapping("user/checkPassword")
//    @ResponseBody
//    public boolean checkPassword(String password) {
//        User user = getCurrentUser();
//        String encrypt = MD5Utils.encrypt(user.getUsername().toLowerCase(), password);
//        return user.getPassword().equals(encrypt);
//    }
//
//    @Log(value="修改密码",module=MODULE)
//    @RequestMapping("user/updatePassword")
//    @ResponseBody
//    public ResponseBo updatePassword(String newPassword) {
//    	Locale locale = LocaleContextHolder.getLocale();
//        try {
//        	if(newPassword.length()<3 || newPassword.length()>16) {
//        		return ResponseBo.error(messageSource.getMessage("user.password.not.valid", null, locale));
//        	}
//        	//判断密码是否跟前三次(历史记录中无值，则直接添加到历史记录)的相同,如果相同，提示;
//        	//如果不同,历史记录<3条，则新增，否则修改最久的那条记录
//        	
//        	User user = (User) SecurityUtils.getSubject().getPrincipal();
//        	String newPasswordEncrypt = MD5Utils.encrypt(user.getUsername().toLowerCase(), newPassword);
//        	List<UserPasswordHistory> list = userPasswordHistoryService.findAllUserPasswordHistory(user.getUserId());
//        	boolean isSameToHistory = false;
//        	if(CollectionUtils.isNotEmpty(list)) {
//        		for(UserPasswordHistory userPasswordHistory:list) {
//        			if(userPasswordHistory.getPassword().equals(newPasswordEncrypt)){
//        				isSameToHistory = true;
//        				break;
//        			}
//        		}
//        	}
//        	
//        	if(isSameToHistory) {
//        		return ResponseBo.ok(messageSource.getMessage("user.update.password.same.before", null, locale));
//        	}else {
//        		int listSize = list.size();
//        		if(listSize <3) {
//        			UserPasswordHistory userPasswordHistory = new UserPasswordHistory();
//            		userPasswordHistory.setUserId(user.getUserId());
//            		userPasswordHistory.setPassword(newPasswordEncrypt);
//            		userPasswordHistory.setCreateTime(new Date());
//            		userPasswordHistoryService.save(userPasswordHistory);
//        		}else {
//        			UserPasswordHistory history = list.get(0);
//            		history.setPassword(newPasswordEncrypt);
//            		history.setCreateTime(new Date());
//            		userPasswordHistoryService.updateAll(history);
//        		}
//        	}
//        	
//            this.userService.updatePassword(newPassword);
//            return ResponseBo.ok(messageSource.getMessage("user.update.password.success", null, locale));
//        } catch (Exception e) {
//            log.error("修改密码失败", e);
//            return ResponseBo.error(messageSource.getMessage("user.update.password.fail", null, locale));
//        }
//    }
//
//    @Log(value="获取用户个人信息",module=MODULE)
//    @RequestMapping("user/profile")
//    public String profileIndex(Model model) {
//        User user = super.getCurrentUser();
//        user = this.userService.findUserProfile(user);
//        String ssex = user.getSsex();
//        if (User.SEX_MALE.equals(ssex)) {
//            user.setSsex("性别：男");
//        } else if (User.SEX_FEMALE.equals(ssex)) {
//            user.setSsex("性别：女");
//        } else {
//            user.setSsex("性别：保密");
//        }
//        model.addAttribute("user", user);
//        return "system/user/profile";
//    }
//
//    @Log(value="获取用户个人信息",module=MODULE)
//    @RequestMapping("user/getUserProfile")
//    @ResponseBody
//    public ResponseBo getUserProfile(Long userId) {
//    	Locale locale = LocaleContextHolder.getLocale();
//        try {
//            User user = new User();
//            user.setUserId(userId);
//            return ResponseBo.ok(this.userService.findUserProfile(user));
//        } catch (Exception e) {
//            log.error("获取用户信息失败", e);
//            return ResponseBo.error(messageSource.getMessage("user.get.fail", null, locale));
//        }
//    }
//
//    @Log(value="修改用户个人信息",module=MODULE)
//    @RequestMapping("user/updateUserProfile")
//    @ResponseBody
//    public ResponseBo updateUserProfile(User user) {
//    	Locale locale = LocaleContextHolder.getLocale();
//        try {
//            this.userService.updateUserProfile(user);
//            return ResponseBo.ok(messageSource.getMessage("user.profile.update.success", null, locale));
//        } catch (Exception e) {
//            log.error("更新用户信息失败", e);
//            return ResponseBo.error(messageSource.getMessage("user.profile.update.fail", null, locale));
//        }
//    }
//
//    @Log(value="更换头像",module=MODULE)
//    @RequestMapping("user/changeAvatar")
//    @ResponseBody
//    public ResponseBo changeAvatar(String imgName) {
//    	Locale locale = LocaleContextHolder.getLocale();
//        try {
//            String[] img = imgName.split("/");
//            String realImgName = img[img.length - 1];
//            User user = getCurrentUser();
//            user.setAvatar(realImgName);
//            this.userService.updateNotNull(user);
//            return ResponseBo.ok(messageSource.getMessage("user.avatar.change.success", null, locale));
//        } catch (Exception e) {
//            log.error("更换头像失败", e);
//            return ResponseBo.error(messageSource.getMessage("user.avatar.change.fail", null, locale));
//        }
//    }
//}
